package menu_api

import (
	"github.com/fatih/structs"
	"github.com/gin-gonic/gin"
	"giv-vue-blog/global"
	"giv-vue-blog/models"
	"giv-vue-blog/models/res"
)

// MenuUpdateView 菜单更新.
// @Summary 菜单更新
// @Description 菜单更新
// @Tags 菜单管理
// @Accept json
// @Produce json
// @Param id path uint true "菜单ID"
// @Param menu body MenuRequest true "菜单对象"
// @Success 200 {object} res.Response{data=string}
// @Router /api/menu/{id} [put]
func (MenuApi) MenuUpdateView(c *gin.Context) {
	var Menu MenuRequest
	err := c.ShouldBindJSON(&Menu)
	if err != nil {
		res.FailedWithError(err, &Menu, c)
		return
	}
	id := c.Param("id")
	//先把之前的banner清空
	var menuModel models.MenuModel
	err = global.DB.Take(&menuModel, id).Error
	if err != nil {
		res.FailedWithMsg("菜单不存在", c)
		return
	}
	//清除第三张表
	global.DB.Model(&menuModel).Association("Banners").Clear()
	//如果选择了banner 那就添加
	if len(Menu.ImageSortList) > 0 {
		//操作第三张表
		var bannerList []models.MenuBannerModel
		for _, sort := range Menu.ImageSortList {
			bannerList = append(bannerList, models.MenuBannerModel{
				MenuID:   menuModel.ID,
				BannerID: sort.ImageID,
				Sort:     sort.Sort,
			})
		}
		err = global.DB.Create(&bannerList).Error
		if err != nil {
			global.Log.Error(err)
			res.FailedWithMsg("创建菜单图片失败", c)
			return
		}
	}
	//更新
	maps := structs.Map(&Menu)
	err = global.DB.Model(&menuModel).Updates(maps).Error
	if err != nil {
		res.FailedWithMsg("菜单更新失败", c)
		return
	}
	res.OkWithData(maps, c)
}
